import {createRouter, createWebHistory} from 'vue-router'
import menu from "@/routers/modules/menu.js";
import {errorRouter} from "@/routers/modules/errorRouter.js";

// 全局路由守卫
/**
 * 完整的导航解析流程
 * 1. 导航被触发。
 * 2. 在失活的组件里调用 beforeRouteLeave 守卫。
 * 3. 调用全局的 beforeEach 守卫。
 * 4. 在重用的组件里调用 beforeRouteUpdate 守卫(2.2+)。
 * 5. 在路由配置里调用 beforeEnter。
 * 6. 解析异步路由组件。
 * 7. 在被激活的组件里调用 beforeRouteEnter。
 * 8. 调用全局的 beforeResolve 守卫(2.5+)。
 * 9. 导航被确认。
 * 10. 调用全局的 afterEach 钩子。
 * 11. 触发 DOM 更新。
 * 12. 调用 beforeRouteEnter 守卫中传给 next 的回调函数，创建好的组件实例会作为回调函数的参数传入。
 */
const router = createRouter({
    // history: createWebHashHistory(),  // hash 模式
    history: createWebHistory('/'),  // history 模式
    routes: [...menu,...errorRouter],

    strict: false,
})

// 全局前置守卫  to 即将进入的目标 from 当前正要离开的目标
router.beforeEach((to, from)=>{
    // console.log(to,from,next)
})

// 全局解析守卫 每次导航的时候进行触发 会在导航确认之前 所有守卫和异步路由确认之后调用
// 是获取数据或执行任何其他操作（如果用户无法进入页面时你希望避免执行的操作）的理想位置。
router.beforeResolve(()=>{

})

// 注册全局后置 钩子
// 它们对于分析、更改页面标题、声明页面等辅助功能以及许多其他事情都很有用。
router.afterEach((to, from)=>{
    console.log(to, from)
})


/**
 * @description 路由跳转错误
 * */
router.onError(error => {
    console.warn('路由错误', error.message)
})


export default router
